package com.test.json;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.entity.User;

import java.util.ArrayList;
import java.util.List;

public class ParseJson {

    public static void main(String[] args) {
        //1.如何组装一个json数据(类似于map集合的规则)
        //语法规则：
        //一个json数据左右两边一定是一对{}
        //{"sex":"男","name":"LPM","id":"1"}
        //{"sex":"男","name":"LPM","id":1}
        //1.1 创建一个json对象
        JSONObject jsonObject = new JSONObject();
        //1.2 加入数据
        jsonObject.fluentPut("id", 1);
        jsonObject.fluentPut("name", "LPM");
        jsonObject.fluentPut("sex", "男");
        //1.3 打印效果
        System.out.println(jsonObject.toString());
        //1.4 取出
        int id = (int) jsonObject.get("id");
        System.out.println(id);
        //...
        //1.5 获取所有的key
        //jsonObject.keySet();

        //2.对象存储到json中
        User user = new User();
        user.setPassword("123456");
        user.setName("LPM");
        //清空json
        jsonObject.clear();
        jsonObject.fluentPut("user", user);

        //打印
        System.out.println(jsonObject.toString());

        //取值
        JSONObject userJson = jsonObject.getJSONObject("user");
        Object obj = userJson.get("password");
        System.out.println(obj);

        //3.直接把user变成一个json对象
        String userJsonStr = JSONObject.toJSONString(user);
        System.out.println(userJsonStr);

        //4.list集合
        List<User> users = new ArrayList<>();
        users.add(new User());
        users.add(new User());
        users.add(new User());
        users.add(new User());

        //4.1 要key的
        jsonObject.clear();
        jsonObject.fluentPut("users", users);
        System.out.println(jsonObject.toString());

        //4.2 不要key的
        String userArrJson = JSONObject.toJSONString(users);
        System.out.println(userArrJson);

        //4.3 取
        JSONArray usersArr = jsonObject.getJSONArray("users");
        System.out.println(usersArr.toString());
        for (int i = 0; i < usersArr.size(); i++) {
//            JSONObject json = (JSONObject) usersArr.get(i);
            JSONObject object = usersArr.getJSONObject(i);
            //正常取
        }

        //5.存多种值
        jsonObject.clear();

        jsonObject.fluentPut("user", user);//对象
        jsonObject.fluentPut("users", users);//集合
        jsonObject.fluentPut("code", 1);//字符串
        System.out.println(jsonObject.toString());


        //6.拿到一个json字符串怎么办
        //转义字符
        String jsonStr6 = "{\"sex\":\"男\",\"name\":\"LPM\",\"id\":1}";

        //转化成json对象
        JSONObject jsonStr6Obj = JSONObject.parseObject(jsonStr6);
        jsonStr6Obj.get("name");

        //直接转化成json数组
//        JSONArray.parseArray(userArrJson);
        JSONArray jsonArray = JSONObject.parseArray(userArrJson);

        //7.拿到一个json字符串，直接转化成Java的实体类
        String jsonUserStr = "{\"age\":0,\"height\":0.0,\"id\":0,\"name\":\"LPM\",\"password\":\"123456\"}";

        //直接转化
        //将json的字符串转化
        User user1 = JSONObject.parseObject(jsonUserStr, User.class);
        System.out.println("user1="+user1);

        //将json对象转化
        JSONObject jsonObject1 = JSONObject.parseObject(jsonUserStr);
        jsonObject1.toJavaObject(User.class);

        //数组的字符串
        List<User> userList = JSONObject.parseArray(userArrJson, User.class);
    }


}
